import { Compiler } from "webpack";

//基础类型
(()=>{
    //布尔型
    //基本语法
    //let 变量名：数据类型 = 值
    let flag:boolean = true
    flag = false
    //数字类型的会报错flag = 10
    console.log(flag);
    //数字型
    let a1:number = 10 //十进制
    let a2:number = 0b1010 //二进制
    let a3:number= 0o12//八进制
    let a4 :number=0xa //十六进制
    console.log(a1);
    console.log(a2);
    console.log(a3);
    console.log(a4);
    //字符串型
    let str1: string='床前明月光'
    let str2: string='疑是地上霜'
    let str3: string='举头望明月'
    let str4: string='低头思故乡'
    console.log('${str1},${str2},${str3},${str4}');
    //字符串和苏子之间能一起拼接
    let str5:string = '我有钱'
    let num: number= 10000
    console.log(str5+num);

    //ts中变量一开始是什么类型 后期赋值的时候只能是当前类型 是不允许用其他类型的数据赋值给当前的变量中的

    //数组型 
    //数组定义方法1
    //let变量名： 数据类型【】 = 【值1，值2】
    let arr1:number []=[10,20]
    console.log(arr1);
    //数据定义方法2泛型的写法
    //语法：let变量名：array<数据类型> = 【值1.值2】
    let arr2 : Array<number>=[100,200]
    console.log(arr2);
    
    //数组定义后里面的数据类型必须和定义数组的时候的类型是一直的 否则会有错误信息提示 也不会编译成js 
    //元祖类型：在定义数组的时候，类型的数据和个数一开始就限定了
    let arr3:[string,number,boolean] = ['狄狄',100,true]
    console.log('arr3: ', arr3);
    //注意 远足类型在受用的时候 数据的类型的位置和数据的个数应该和在定义元祖的时候的数据类型和位置应该是一致的
    console.log(arr3[0].split(''));
    console.log(arr3[1].toFixed(2));
    console.log(arr3[2].valueOf());

    console.log('=========');
    //枚举类型，枚举类型的每隔数据值都可以叫元素，每个元素都有自己的编号，是从零开始依次递增
    enum Color{
        red,
        green,
        blue
    }

    //定义一个color的枚举类型的变量来接收枚举的值
    let color :Color = Color.red
    console.log('color: ', color);
    console.log(Color.red,Color.green,Color.blue);

    //枚举中的值可以是中文中的数据值
    enum Gender{
        男,
        女
    }
    console.log(Gender.男,Gender.女);
    console.log('====================');

    //any类型
    // let str: any = 100
    // str='春眠不觉晓，处处闻啼鸟'
    // console.log(str);
    //当一个数组中要储存多个数据，个数不确定类型不确定时 也可以使用any类型来定义

    //object类型
    //定义一个函数，参数是object类型返回值也是object类型
    function getObj(obj:object):object{
        console.log(obj);
        return{
            name:'皮卡丘',
            age:18
        }
    }
console.log(getObj(String));

console.log('=================');
//联合类型（Untion Types）表示取之可以为多种类型中的一种
//需求1:定义一个函数得到一个数字或字符串值的字符串形式值
function getString(str:number|string):string{
    return str.toString()
}
console.log(getString('123'));
})()